<?php
/**
 * @package PWE
 * @author Gmax <gmaxfr78@gmail.com>
 */
class navigation {
    private static $_rooter;
    private static $_root;
    
    public static function init() {
        self::$_rooter = new controler_rooter();
        self::$_root = self::$_rooter->getRoot();
        
    }
    /**
     * retourne tableau de structure de la page courante
     * @return array
     */
    public static function getBreadcrumb(){
        $root = self::$_root;
        $breadcrumb = $root['hierarchie'];
        
        if(!in_array(PWE::getOrigineCategory(), $breadcrumb)){array_unshift ($breadcrumb, PWE::getOrigineCategory());}
        if(self::getTarget()!==null){$breadcrumb[] = self::getTarget();}
        
        return $breadcrumb;
    }
    /**
     * renvoi le code html du menu demandé
     * @param string $idMenu
     * @return string
     */
    public static function getNavigationMenu($idMenu){
        $templateMenuPath = self::_getTemplateMenuPath($idMenu);
        $menu = null;
        
        $currentCategory = self::getCategory();
        if($currentCategory!==null){
            $menu = $currentCategory->getMenu($idMenu);
        }
        
        if($menu===null)$menu = new modele_menu($idMenu);
        return ($menu!==null)?$menu->getHtml($templateMenuPath):'';
    }
    /* public */
    public static function getQuery(){
        return self::$_root['query'];
    }
    /**
    * renvoi l'url courante
    * @return string
    */
    public static function getUrl(){
        $url = PWE::getBaseURL();
        $uri = str_replace(PWE::getBaseDirectory(), '', $_SERVER['REQUEST_URI']);
       
        if(substr($uri,0,1)==='/'){
            $url .= substr($uri,1);
        }else{
            $url .= $uri;
        }
        return $url;
    }
    /**
    * renvoi le modele de la cible
    * @return string
    */
    public static function getModele(){
        return (self::$_root['target']!==null)?self::$_root['target']->type:'';
    }
    /**
     * renvoi l'id de la cible
     * @return int
     * @deprecated utiliser getTargetId()
     */
    public static function getModeleId(){
        return (self::$_root['target']!==null)?self::$_root['target']->getId():0;
    }
    /**
     * renvoi l'id de la cible
     * @return int
     */
    public static function getTargetId(){
        return (self::$_root['target']!==null)?self::$_root['target']->getId():0;
    }
    /**
     * renvoi l'objet cible
     * @return \modele|null
     */
    public static function getTarget(){
        return self::$_root['target'];
    }
    /**
     * renvoi l'objet cible
     * @deprecated utiliser getTarget()
     * @return \modele|null
     */
    public static function getTargetObject(){
        return self::getTarget();
    }
    /**
     * renvoi la cible telle que définit dans la partie finale de l'url
     * @return string
     */
    public static function getTargetName(){
        return self::$_root['target_name'];
    }
    /**
     * defini la redirection à effectuer
     * @param /modele_redirection $redirection
     */
    public static function setRedirection($redirection){
        self::$_root['redirection'] = $redirection;
    }
    /**
     * renvoi la redirection en cours
     * @return \modele_redirection|null
     */
    public static function getRedirection(){
        return (isset(self::$_root['redirection']))?self::$_root['redirection']:null;
    }
    /**
     * renvoi la categorie active
     * @return \modele_category
     */
    public static function getCategory(){
        if(self::getModele()==='category'||self::getModele()==='tag') return self::getTarget();
        elseif(self::getTarget()!==null) return self::getTarget()->getCategory();
        return null;
    }
    
    /**
     * renvoi si l'element de navigation est actif
     * @param string $permalien
     * @return boolean
     */
    public static function isNavigationActive($url){
        $active = false;
        if(self::getTarget()!==null){
            if($url === self::getTarget()->getUrl()){
                $active = true;
            }elseif(self::getTarget()->getCategory()!==null){
                if(self::getTarget()->getCategory()->getUrl()===$url){
                    $active = true;
                }else{
                    $cat = (self::getModele()!=='category')?self::getCategory():self::getTarget();
                    while($cat->haveParent()){
                        if($cat->getUrl()===$url){
                            $active = true;
                            break;
                        }
                        $cat = $cat->getParent();
                    }
                }
                
            }
        }
        return $active;
    }
    
    /* admin */
    public static function getAdminRoot(){
        return self::$_root;
        //return self::$_adminRoot;
    }
    /**
     * renvoi le template de page défini dans le query ?template=tamplate_page
     * @return string
     */
    public static function getAdminTemplate(){
        return self::$_root['template'];
        //return self::$_adminRoot['template'];
    }
    /**
     * défini un template de page
     * @param string $template
     */
    public static function setAdminTemplate($template){
        //self::$_adminRoot['template'] = $template;
        self::$_root['template'] = $template;
    }
    /**
     * renvoi l'action à executer : create/read/update/delete
     * @return string
     */
    public static function getAdminAction(){
        //return self::$_adminRoot['action'];
        return self::$_root['action'];
    }
    /**
     * défini l'action à executer : create/read/update/delete
     * @param string $action
     */
            
    public static function setAdminAction($action){
        //self::$_adminRoot['action'] = $action;
        self::$_root['action'] = $action;
    }
    /**
     * renvoi le modele d'objet à traiter
     * @return string
     */
    public static function getAdminModele(){
        //return self::$_adminRoot['modele'];
        return self::$_root['modele'];
    }
    /**
     * défini le modele d'objet à utiliser
     * @param string $modele
     */
    public static function setAdminModele($modele){
        //self::$_adminRoot['modele'] = $modele;
        self::$_root['modele'] = $modele;
    }
    /**
     * renvoi l'identifiant du modele d'objet à traiter
     * @return int
     */
    public static function getAdminModeleId(){
        //return (isset(self::$_adminRoot['modele_id']))?self::$_adminRoot['modele_id']:0;
        return (isset(self::$_root['modele_id']))?self::$_root['modele_id']:0;
    }
    /**
     * défini l'identifiant du modele d'objet à traiter
     * @param int $modeleId
     */
    public static function setAdminModeleId($modeleId){
        //self::$_adminRoot['modele_id'] = $modeleId;
        self::$_root['modele_id'] = $modeleId;
    }
    /**
     * indique si l'action doit être effectuée
     * @return boolean
     */
    public static function isDoAction(){
        //return (self::$_adminRoot['do']==1)?true:false;
        return (self::$_root['do']==1)?true:false;
    }
    /**
     * 
     * @param string $identifiant
     * @return string
     */
    private static function _getTemplateMenuPath($identifiant='default'){
        return THEME_PATH . PWE::getTheme() . '/menu-' . $identifiant . '.php';
    }
    
    /**
     * indique si la page est en erreur 404
     * @return boolean
     */
    public static function is404(){
        return self::$_root['404'];
    }
    
    /**
     * indique si la cible est une requete ajax
     * @return boolean
     */
    public static function isAjaxRequest(){
        return (strtolower(substr(self::$_root['target_name'], -4)) === 'ajax')?true:false;
    }
    /**
     * indique si la cible est un sitemap
     * @return boolean
     */
    public static function isSitemap(){
        return (strtolower(substr(self::$_root['target_name'], -11)) === 'sitemap.xml')?true:false;
    }
    
    /**
     * indique si une redirection est en cours
     * @return boolean
     */
    public static function isRedirection(){
        return (self::getRedirection()!==null)?true:false;
    }
}
?>